﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;

using extremeEvents;
using BackofficeExtremeEvents.Data;
using System.IO;
using System.Drawing;

namespace BackofficeExtremeEvents.Eventos
{
    public partial class EditarEvento : System.Web.UI.Page
    {
        int data;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["data"] != null) data = (int)Session["data"];
            if (!IsPostBack)
            {

                List<listarCategorias_Result> lCat = DLGenerica.Instance.getCategorias();

                for (int i = 0; i <= lCat.Count - 1; i++)
                {
                    this.dbCategoria.Items.Insert(i, lCat.ElementAt(i).descricao);

                }

                procurarFlyer_porIdEvento_Result fl = (procurarFlyer_porIdEvento_Result)DLGenerica.Instance.getFlyerByIdEvento((int)Session["id_evento"]);

                if (fl == null)
                {
                    procurarEventoSemFlyer_porID_Result evento = (procurarEventoSemFlyer_porID_Result)DLGenerica.Instance.getEventoSemFlyerById((int)Session["id_evento"]);
                    this.dbCategoria.SelectedIndex = evento.id_categoria - 1;
                    this.txTitulo.Text = evento.Titulo;
                    this.txDescricao.Text = evento.Descrição;
                    this.txEmail.Text = evento.Email;
                    this.btDe.Text = evento.Data_Inicio.ToShortDateString();
                    this.btAte.Text = evento.Data_Fim.ToShortDateString();
                    this.txMorada.Text = evento.Morada;
                    this.txCodigo.Text = evento.Código_Postal;
                    this.txContacto.Text = evento.Contacto;
                    this.txLatitude.Text = evento.Latitude;
                    this.txLongitude.Text = evento.Longitude;
                    this.txPreco.Text = evento.Preço.ToString();
                    this.txURL.Text = evento.URL;
                    this.cbCancelado.Checked = evento.cancelado; 

                }
                else
                {
                    procurarEventoComFlyer_porID_Result evento = (procurarEventoComFlyer_porID_Result)DLGenerica.Instance.getEventoComFlyerById((int)Session["id_evento"]);

                    this.dbCategoria.SelectedIndex = evento.id_categoria - 1;
                    this.txTitulo.Text = evento.Titulo;
                    this.txDescricao.Text = evento.Descrição;
                    this.txEmail.Text = evento.Email;
                    this.btDe.Text = evento.Data_Inicio.ToShortDateString();
                    this.btAte.Text = evento.Data_Fim.ToShortDateString();
                    this.txMorada.Text = evento.Morada;
                    this.txCodigo.Text = evento.Código_Postal;
                    this.txContacto.Text = evento.Contacto;
                    this.txLatitude.Text = evento.Latitude;
                    this.txLongitude.Text = evento.Longitude;
                    this.txPreco.Text = evento.Preço.ToString();
                    this.txURL.Text = evento.URL;
                    this.cbCancelado.Checked = evento.cancelado;
                    
                }
            }
        }

        protected void btDe_Click(object sender, EventArgs e)
        {
            Session["data"] = 0;
            Calendar1.Visible = true;
        }

        protected void Calendar1_SelectionChanged(object sender, EventArgs e)
        {
            if (data == 0)
            {
                btDe.Text = Calendar1.SelectedDate.ToShortDateString();
            }
            else
            {
                btAte.Text = Calendar1.SelectedDate.ToShortDateString();
            }
            Calendar1.Visible = false;
        }

        protected void btAte_Click(object sender, EventArgs e)
        {
            Session["data"] = 1;
            Calendar1.Visible = true;
        }

        protected void btVoltar_Click(object sender, EventArgs e)
        {
            Response.Redirect("../Eventos/ListarEventos.aspx");
        }

        protected void btGuardar_Click(object sender, EventArgs e)
        {
            string ret = validacoes();

            if (ret == "")
            {
                DateTime de = new DateTime();
                DateTime ate = new DateTime();
                Decimal preco = new decimal();
                DLGenerica.Instance.editarEstadoEvento((int)Session["id_evento"], cbCancelado.Checked); 
                DateTime.TryParse(btDe.Text, out de);
                DateTime.TryParse(btAte.Text, out ate);
                Decimal.TryParse(txPreco.Text, out preco);
                DLGenerica.Instance.editarEvento((int)Session["id_evento"], dbCategoria.SelectedIndex + 1, de, ate,
                                                txTitulo.Text, txDescricao.Text, preco, txMorada.Text, txCodigo.Text,
                                                txURL.Text, txContacto.Text, txEmail.Text, txLatitude.Text, txLongitude.Text);

                Response.Redirect("../Eventos/ListarEventos.aspx");
            }
            else
            {
                //informa utilizador que foi editado com sucesso
                Response.Write("<script>alert('"+ ret +"');</script>");
            }
        }

        private string validacoes()
        {
            DateTime de, ate;
            if (txTitulo.Text.Length <= 0) return "O Titulo não pode estar em branco";
            de = DateTime.Parse(btDe.Text);
            ate = DateTime.Parse(btAte.Text);
            if (DateTime.Compare(de, ate) == 1) return "A data incial não pode ser superior à data final";
            
            
            return ""; 
        }
    }
}